home *** CD-ROM | disk | FTP | other *** search
- /*
- * file: Qwertytunes Filing.c
- *
- * started 22 January 1992
- * david van brink
- *
- * The filing routines
- *
- */
-
-
- /*--------------------------
- Inclusions
- --------------------------*/
-
- #include <Files.h>
- #include <StandardFile.h>
- #include <Resources.h>
- #include <Errors.h>
- #include <Memory.h>
-
- #include "BigEasy2.h"
- #include "BigEasyDialogs.h"
-
- #include "Qwertytunes.h"
- #include "Qwertytunes Filing.h"
-
- /*--------------------------
- Local Prototypes
- --------------------------*/
-
- OSErr InternalSaveData(TDoc *d);
-
- /*--------------------------
- Wasabe
- --------------------------*/
-
- void OpenDoc(short n,short item, short ref)
- {
- StandardFileReply sfr;
- OSType ourType[5];
- ourType[0] = kDocumentFileType;
- StandardGetFile(nil,1,ourType,&sfr);
-
- if(sfr.sfGood)
- {
- OpenDocSpec(&sfr.sfFile);
- }
- }
-
-
- void OpenDocSpec(FSSpec *fSpec)
- {
- short i;
- short refNum;
- register TDoc *d;
- TSaveRecord **sr;
- FInfo fileInfo;
-
- for(i = 0; i<kDocMax; i++)
- {
- d = &gDoc[i];
- if(!d->used)
- goto gotOne;
- }
-
- EasyDialogMessage(0,(StringPtr)0x910,"\pNo more windows may be opened.",
- kEasyDialogOkay);
- goto goHome;
-
- gotOne:
- refNum = FSpOpenResFile(fSpec,fsRdPerm);
- if(refNum == 1)
- goto fileError;
- sr = (void *)Get1IndResource(kDocumentResType,1);
- if(!sr)
- goto closeAndFileError;
- HLock((void *)sr);
- if((**sr).docVersion != kDocVersion)
- {
- EasyDialogMessage(0,fSpec->name,
- "\pThat was an old version of the file format.",
- kEasyDialogOkay);
- goto closeAndFileError;
- }
-
- d->used = true;
- d->docSpec = *fSpec;
- NewDocFromSaveRecord(i,&(**sr));
-
- CloseResFile(refNum);
- goto goHome;
-
- closeAndFileError:
- CloseResFile(refNum);
- fileError:
- EasyDialogMessage(0,fSpec->name,
- "\pThere was a problem opening the file.",
- kEasyDialogOkay);
-
- goHome:;
- }
-
-
-
-
-
- short SaveDoc(short n,short item, short ref)
- /*
- * return nonzero to
- * say it was cancelled.
- */
- {
- TDoc *d;
- short result;
-
- d = &gDoc[n - kFirstDocWindow];
-
- DeactivateDoc(n);
-
- if(!d->everSaved)
- result = SaveAsDoc(n,item,ref);
- else
- result = InternalSaveData(d);
-
- ActivateDoc(n);
- return result;
- }
-
- short SaveAsDoc(short n,short item, short ref)
- {
- StandardFileReply sfr;
- register TDoc *d;
- Boolean result;
- TSaveRecord *sr,**srH;
- short refNum;
- OSErr thisError;
- OSType fileType;
-
- d = &gDoc[n - kFirstDocWindow];
-
- DeactivateDoc(n);
-
- StandardPutFile("\p",d->docSpec.name,&sfr);
-
- result = !sfr.sfGood;
- if(sfr.sfGood)
- {
- d->docSpec = sfr.sfFile;
- SetWTitle(d->w,d->docSpec.name);
- thisError = InternalSaveData(d);
- }
- else
- thisError = 1;
-
- return thisError;
- }
-
-
- OSErr InternalSaveData(TDoc *d)
- {
- TSaveRecord **srH,*sr;
- short refNum;
- OSErr thisError;
- Rect r;
-
- FixUpDocConnectionList(d);
-
- srH = (void *)NewHandle(sizeof(TSaveRecord));
- HLock((void *)srH);
- sr = *srH;
-
- sr->docVersion = kDocVersion;
- SetPort(d->w);
- sr->windowRect = qd.thePort->portRect;
- LocalToGlobal((Point *)&sr->windowRect.top);
- LocalToGlobal((Point *)&sr->windowRect.bottom);
- sr->sr = d->sr;
-
- HUnlock((void *)srH);
-
- FSpCreateResFile(&d->docSpec,kCreatorFileType,kDocumentFileType,0);
-
- thisError = ResError();
- if(thisError == dupFNErr)
- thisError = 0;
- if(thisError)
- goto goHome;
-
- refNum = FSpOpenResFile(&d->docSpec,fsRdWrPerm);
-
- if(refNum != -1)
- {
- Replace1Resource((void *)srH,kDocumentResType,10);
- CloseResFile(refNum);
- d->changed = false;
- d->littleChanged = false;
- d->everSaved = true;
- }
- else
- thisError = -1;
-
- goHome:
- if(srH)
- {
- HUnlock((Handle)srH);
- DisposeHandle((Handle)srH);
- }
-
- FixUpMenus(d);
- return thisError;
- }
-
-